有時在設計自動化工具時, 會需要讓工具在開機時自動啟動. 以下是筆者整理出的方式
Windows
複雜版 - 手動驗證時使用
簡單版 - 使用powershell 設定
Set-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name 'OpenCalc' -Value "c:\WINDOWS\system32\calc.exe"
Set-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name 'OpenCalc' -Value "c:\WINDOWS\system32\calc.exe"
聰明版 - 將需要執行的程式變成Windows服務
nssm.exe install "demoService" "C:\demo\demo.exe"
* demoService: service Name
* "C:\demo\demo.exe": 需要執行的檔案
Service "DemoService" installed successfully!
nssm.exe start DemoService
nssm.exe stop DemoService
nssm.exe remove "DemoService"
除此之外, 也可以使用圖形介面 控制台\所有控制台項目\系統管理工具\ 服務 做相關設定.
參考資料:
Raspberry Pi [Linux based OS]
如果是使用樹莓派讓程式在開機自動執行, 筆者建議可以使用service的方式取代將指令放在rc.local的檔案裏頭會更好
PS: 如果是一般的Linux 也建議可以這麼做.
主要原因
如果放在rc.local中, 程式在背景執行時掛掉了, 就無法自動重啟及保留相關紀錄 ;; 反之, 使用service的方式, 是可以設定成掛掉後自動重啟及在/var/log 中保留服務在執行時的資訊
實作
[Unit]
Description=UP service
After=multi-user.target
[Service]
ExecStart=/bin/bash -u /usr/bin/.up &
WorkingDirectory=/usr/bin
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
[Install]
WantedBy=multi-user.target
Alias=up.service
systemctl enable up.service
systemctl disable up.service
參考資料: